package com.atao.baokede.controller;

import com.atao.baokede.pojo.*;
import com.atao.baokede.pojo.vo.ChargeOrderVo;
import com.atao.baokede.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;

/**
 * 管理员层
 */
@RestController
@RequestMapping("/admin")
public class AdminController {
    @Autowired
    private AdminService adminService;


    /**
     * 同意商品上架
     *
     * @param itemId 商品id
     * @return 无
     */
    @PutMapping("/agreeItem/{itemId}")
    public Result agreeItem(@PathVariable("itemId") Long itemId) throws IOException {
        adminService.agreeItem(itemId);
        return Result.success();
    }

    /**
     * 拒绝商品上架
     *
     * @param itemId 商品id
     * @param reason 拒绝理由
     * @return 无
     */
    @PutMapping("/refuseItem/{itemId}")
    public Result refuseItem(@PathVariable("itemId") Long itemId,
                             @RequestParam String reason) throws IOException {
        adminService.refuseItem(itemId,reason);
        return Result.success();
    }

    /**
     * 禁用用户
     * @param userId 用户id
     * @return 无
     */
    @PutMapping("/disableUser")
    public Result disableUser(@RequestParam Long userId){
        adminService.disableUser(userId);
        return Result.success();
    }

    /**
     * 禁用商户
     *
     * @param merchantId 商户id
     * @return 无
     */
    @PutMapping("/disableMerchant")
    public Result disableMerchant(@RequestParam Long merchantId) throws IOException {
        adminService.disableMerchant(merchantId);
        return Result.success();
    }


    /**
     * 解禁用户
     *
     * @param userId 用户id
     */
    @PutMapping("/enableUser")
    public Result enableUser(@RequestParam Long userId){
        adminService.enableUser(userId);
        return Result.success();
    }

    /**
     * 解禁商户
     *
     * @param merchantId 商户id
     */
    @PutMapping("/enableMerchant")
    public Result enableMerchant(@RequestParam Long merchantId){
        adminService.enableMerchant(merchantId);
        return Result.success();
    }

    /**
     * 根据用户名分页查询用户（除管理员）
     *
     * @param keyword 关键字（非必须）
     * @param pageNum 页码
     * @param pageSize 每页数量
     */
    @GetMapping("/findUserByName")
    public Result<PageBean<User>> findUserByName(
            @RequestParam(required = false) String keyword,
            @RequestParam Integer pageNum,
            @RequestParam Integer pageSize
    ){
        PageBean<User> pb=adminService.findUserByName(keyword,pageNum,pageSize);
        return Result.success(pb);
    }

    /**
     * 根据商户名分页查询商户
     *
     * @param keyword 关键字（非必须）
     * @param pageNum 页码
     * @param pageSize 每页数量
     */
    @GetMapping("/findMerchantByName")
    public Result<PageBean<Merchant>> findMerchantByName(
            @RequestParam(required = false) String keyword,
            @RequestParam Integer pageNum,
            @RequestParam Integer pageSize
    ){
        PageBean<Merchant> pb=adminService.findMerchantByName(keyword,pageNum,pageSize);
        return Result.success(pb);
    }


    /**
     * 根据用户输入的用户名,订单号,订单状态,模糊搜索用户余额支付订单（分页查询）
     *
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @param orderStatus 订单状态（必须），1-已支付，2-已退款
     * @param userKeyword 用户关键字（非必须）
     * @param orderNoKeyword 订单号关键字（非必须）
     */
    @GetMapping("/findUserBalancePayOrdersByKeyword")
    public Result<PageBean<ChargeOrderVo>> findUserBalancePayOrdersByKeyword(
            @RequestParam Integer pageNum,
            @RequestParam Integer pageSize,
            @RequestParam(required = true) Integer orderStatus,
            @RequestParam(required = false) String userKeyword,
            @RequestParam(required = false) String orderNoKeyword
    ){
        PageBean<ChargeOrderVo> pb=adminService.findUserBalancePayOrdersByKeyword(pageNum,pageSize,orderStatus,userKeyword,orderNoKeyword);
        return Result.success(pb);
    }

    /**
     * 根据状态和商品信息模糊搜索（分页查询）
     *
     * @param state 商品状态 0-审核中，1-正常，2-下架，3-审核未通过（必须）
     * @param itemKeyword 商品关键字（非必须）
     * @param itemCategory 商品分类（非必须）
     * @param itemBrand 商品品牌（非必须）
     * @param pageNum 页码
     * @param pageSize 每页数量
     */
    @GetMapping("/findItemsByStateAndName")
    public Result<PageBean<Item>> findItemsByStateAndInformation(
            @RequestParam Integer state,
            @RequestParam(required = false) String itemKeyword,
            @RequestParam(required = false) String itemCategory,
            @RequestParam(required = false) String itemBrand,
            @RequestParam Integer pageNum,
            @RequestParam Integer pageSize
    ){
        PageBean<Item> pb=adminService.findItemsByStateAndInformation(state,itemKeyword,itemCategory,itemBrand,pageNum,pageSize);
        return Result.success(pb);
    }

}
